﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//char* a[] = { "BEIJING", "SHENZHEN", "SHANGHAI", "GUANGZHOU" };
//char** pa[] = { a + 3, a + 2, a + 1, a };
//char*** ppa = pa;
//int main(void) {
//    printf("%s, ", **++ppa);
//    printf("%s, ", *-- * ++ppa + 3);
//    printf("%s, ", *ppa[-2] + 3);
//    printf("%s", ppa[-1][-1] + 1);
//}

//int main()
//{
//	unsigned char a = 200;
//	unsigned char b = 100;
//	unsigned char c = 0;
//	//00000000  00000000 00000000 1100 1000  a
//	//00000000  00000000 00000000 0110 0100  b
//	//1100 1000  a
//	//0110 0100  b
//	//00000000  00000000 00000000 1100 1000  a
//	//00000000  00000000 00000000 0110 0100  b
//	//00000000  00000000 00000001 0010 1100  c
//	//0010 1100  c
//	c = a + b;
//	printf("%d %d ", a + b, c);
//	return 0;
//}

//int main()
//{
   // char a[1000] = { 0 };
   // int i = 0;
   // for (i = 0; i < 1000; i++)
   // {
   //     a[i] = -1 - i;
   // }
   // //1111 1111   -1
   // //1111 1110   -2
   // //1111 1101   -3
   // //……
   // //1000 0000   -128
   ////10111 1111   -129
   // //0111 1111   -129
   // //0111 1110   -130
   // //0111 1101   -131
   // //……
   // //0000 0001   -255
   // //0000 0000   -256
//
//    printf("%d", strlen(a));
//    return 0;
//}



//5位运动员参加了10米台跳水比赛，有人让他们预测比赛结果：
//A选手说：B第二，我第三；
//
//B选手说：我第二，E第四；
//
//C选手说：我第一，D第二；
//
//D选手说：C最后，我第三；
//
//E选手说：我第四，A第一；
//
//比赛结束后，每位选手都说对了一半，请编程确定比赛的名次。
//int istrue(int* arr)
//{
//    if (arr[1] == 2 && arr[0] == 3 )
//        return 0;
//    if (arr[1] != 2 && arr[0] != 3)
//        return 0;
//
//    if (arr[1] == 2 && arr[4] == 4)
//        return 0;
//    if (arr[1] != 2 && arr[4] != 4)
//        return 0;
//
//
//    if (arr[2] == 1 && arr[3] == 2)
//        return 0;
//    if (arr[2] != 1 && arr[3] != 2)
//        return 0;
//
//    if (arr[2] == 5 && arr[3] == 3) 
//        return 0;
//    if (arr[2] != 5 && arr[3] != 3)
//        return 0;
//
//    if (arr[4] == 4 && arr[0] == 1)
//        return 0;
//    if (arr[4] != 4 && arr[0] != 1)
//        return 0;
//    return 1;
//}
//int main()
//{
//    int arr[5] = { 0 };
//    for (int i = 1; i <= 5; i++)
//    {
//        arr[0] = i;
//        for (int j = 1; j <= 5; j++)
//        {
//            if (j != i)
//            {
//                arr[1] = j;
//                for (int z = 1; z <= 5; z++)
//                {
//                    if (z != i && z != j)
//                    {
//                        arr[2] = z;
//                        for (int y = 1; y <= 5; y++)
//                        {
//                            if (y != i && y != j && y != z)
//                            {
//                                arr[3] = y;
//                                for (int x = 1; x <= 5; x++)
//                                {
//                                    if (x != i && x != j && x != z && x != y)
//                                    {
//                                        arr[4] = x;
//                                       
//                                        if (istrue(arr))
//                                        {
//                                            printf("A-->%d  B-->%d  C-->%d D-->%d E-->%d\n", arr[0], arr[1], arr[2], arr[3], arr[4]);
//                                        }
//                                    }
//                                }
//                            }
//                        }
//                    }
//                }
//            }
//
//        }
//    }
//    return 0;
//}




//日本某地发生了一件谋杀案，警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
//以下为4个嫌疑犯的供词:
//A说：不是我。
//B说：是C。
//C说：是D。
//D说：C在胡说
//已知3个人说了真话，1个人说的是假话。
//现在请根据这些信息，写一个程序来确定到底谁是凶手。
//int istrue(char c)
//{
//	int flag = 0;
//	if (c != 'a')
//		flag += 1;
//	if (c == 'c')
//		flag += 1;
//	if (c == 'd')
//		flag += 1;
//	if (c != 'd')
//		flag += 1;
//	if (flag == 3)
//		return 1;
//	return 0;
//
//}
//int main()
//{
//	char a = 0;
//	for (a = 'a'; a < 'e'; a++)
//	{
//		if (istrue(a))
//			printf("凶手是：%c", a);
//	}
//	return 0;
//}


//在屏幕上打印杨辉三角。
//1
//
//1 1
//
//1 2 1
//
//1 3 3 1
//
//……
//int main()
//{
//	int arr[250][250] = { 0 };
//	arr[0][0] = 1;
//	arr[1][0] = 1;
//	arr[1][1] = 1;
//	int n = 0;
//	scanf("%d", &n);
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j <= i; j++)
//		{
//			if (j == 0 || i == j)
//			{
//				arr[i][j] = 1;
//			}
//			else
//			{
//				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
//			}
//			printf("%-8d", arr[i][j]);
//		}
//		printf("\n");
//	}
//
//	return 0;
//}



//int main()
//{
//    char a = -1;
//    /*
//    *  将-1存入a的过程：
//    * -1:先拿到4个字节大小二进制位
//    * 10000000 00000000 00000000 00000001   原码
//    * 11111111 11111111 11111111 11111110   反码
//    * 11111111 11111111 11111111 11111111   补码
//    * 再截取一个字节存入
//    * 11111111    最后a里面放置的内容
//    */
//    signed char b = -1;
//    /*
//    * b同理：
//    * 11111111    最后b里面放置的内容
//    */
//    unsigned char c = -1;
//    /*
//    * c同理：
//    * 11111111    最后c里面放置的内容
//    */
//
//
//    printf("a=%d,b=%d,c=%d", a, b, c);
//    //对于小于四个字节的类型再遇到 %d%u 或者进行算术运算时，就会发生整形提升：
//    //此时整形提升的规则是把一个字节的内容取出来如果是signed类型补符号位，unsined类型补0
//    /*
//    * %d a过程
//    * 11111111  -->取出一个字节
//    * 11111111 11111111 11111111 11111111    -->根据a类型和规则进行整型提升
//    * %d --->将数值看成有符号的类型进行读数并打印其十进制数值
//    * 要打印十进制要找到原码。此时将a转为源码
//        10000000 00000000 00000000 00000001
//    * 打印-1
//    */
//    /*
//    * b同理：
//    * 打印-1
//    */
//    /*
//    *  %d c过程
//    * 11111111  -->取出一个字节
//    * 00000000 00000000 00000000 11111111    -->根据c类型和规则进行整型提升
//    * 要打印十进制要找到原码。此时将c转为源码
//        00000000 00000000 00000000 11111111
//    * 打印
//    */
//    return 0;
//}


//int main()
//{
//    char a = -128;
//    //100000000     a内存
//    printf("%u\n", a);
//    //11111111 11111111 11111111 10000000  整形提升
//    //%d --->将数值看成无符号的类型进行读数并打印其十进制数值
//    //无符号原码
//    //11111111 11111111 11111111 10000000
//    //
//    return 0;
//}


//#include <stdio.h>
//int main()
//{
//    char a = 128;
//    /*
//    * 00000000 00000000 00000000 10000000   原反补
//    * 截取一个字节存入
//    * 10000000    最后a里面放置的内容
//    */
//   
//    
//    printf("%u\n", a);
//    //11111111 11111111 11111111 10000000  整形提升
//    //无符号的原码
//    //11111111 11111111 11111111 10000000   
//    //
//    return 0;
//}


//int main()
//{
//	int i = -20;
//	//100000000 00000000 00000000 00010100   原
//	//111111111 11111111 11111111 11101011   反
//	//111111111 11111111 11111111 11101100   补
//	unsigned  int  j = 10;
//	//000000000 00000000 00000000 00001010   原，反，补
//
//	printf("%d\n", i + j);
//	//111111111 11111111 11111111 11101100
//	//000000000 00000000 00000000 00001010
//	//111111111 11111111 11111111 11110110  i+j 补码
//	//111111111 11111111 11111111 11110101  反码
//	//100000000 00000000 00000000 00001010  原码  -10
//
//	return 0;
//}

//按照补码的形式进行运算，最后格式化成为有符号整数
//
//#include<windows.h>
//int main()
//{
//	unsigned int i;
//	for (i = 9; i >= 0; i--)
//	{
//	
//		
//		//000000000 00000000 00000000 00001001 9
//		//000000000 00000000 00000000 00001000 8
//		//000000000 00000000 00000000 00000111 7
//		//000000000 00000000 00000000 00000110 …
//		//000000000 00000000 00000000 00000101
//		//000000000 00000000 00000000 00000100
//		//000000000 00000000 00000000 00000011
//		//000000000 00000000 00000000 00000010
//		//000000000 00000000 00000000 00000001
//		//000000000 00000000 00000000 00000000 0
//		// 接下来i-1的结果不是-1，而是4294967295（无符号的0xFFFFFFFF）
//		/*
//		    首先计算机内部i - 1<---> i + (-1)
//			000000000 00000000 00000000 00000000  i 无符号
//			11111111 11111111 11111111 111111111  -1有符号
//			有符号和无符号的数相加减，整形提升有符号的数转化为无符号
//			11111111 11111111 11111111 111111111   结果
//			无符号数0xFFFFFFFF
//		*/
//		//11111111 11111111 11111111 111111111	
//		//11111111 11111111 11111111 111111110
//		//……
//		//10000000 00000000 00000000 000000000
//		//……
//	
//		printf("%u\n", i);
//	}
//
//	return 0;
//}



#include <stdio.h>
unsigned char i = 0;
int main()
{
    for (i = 0; i <= 255; i++)
    {

        //255:  00000000 00000000 00000000 11111111  （被比较的数）
        // 
        // 
        //i                                          -->  截取后i内存的值    --> 与255比较时整形提升后的四个字节
        //00000000 00000000 00000000 00000000        -->  00000000           -->  00000000 00000000 00000000 00000000 
        //00000000 00000000 00000000 00000001
        //00000000 00000000 00000000 00000010
        //……
        //00000000 00000000 00000000 10000000  128
        //00000000 00000000 00000000 10000001
        //……
        //00000000 00000000 00000000 11111111  255
        //00000000 00000000 00000001 00000000  256    -->  00000000         -->  00000000 00000000 00000000 00000000 
        //00000000 00000000 00000001 00000001  257    -->  00000001         -->  00000000 00000000 00000000 00000001
        // …… 
        //00000000 00000000 00000001 11111111  511    -->  11111111         -->  00000000 00000000 00000000 11111111 
        //00000000 00000000 00000010 00000000  511    -->  00000000         -->  00000000 00000000 00000000 00000000 

        

        printf("hello world\n");
        
    }
    return 0;
}
